"""
小提琴图（violin plot）用于显示数据分布及其概率密度：

图形中间相当于箱线图：黑色粗条代表四分位范围，分别展示中位数、25%分位数、75%分位数；
两侧的曲线代表核密度图：越胖表示该位置的数据数量越多
"""
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import mpld3

sns.set(style="whitegrid")

# 1. 读取保险费数据集
df = pd.read_csv('./Files/insurance/insurance.csv')
# print(df.head())

# 2. 全部保险费的数据分布
plt.figure(figsize=(10, 6))
sns.violinplot(x=df['charges'])
plt.savefig('./Files/violin-1.png')

# 3. 性别男女与保险费的关系分布
plt.figure(figsize=(10, 6))
sns.violinplot(x="sex", y="charges", data=df)
plt.savefig('./Files/violin-2.png')

# 4. 是否抽烟与保险费的关系分布
plt.figure(figsize=(10, 6))
sns.violinplot(x="smoker", y="charges", data=df)
plt.savefig('./Files/violin-3.png')

# 5. 孩子个数与保险费的关系分布
plt.figure(figsize=(10, 6))
sns.violinplot(x="children", y="charges", data=df)
plt.savefig('./Files/violin-4.png')

# 6. 年龄与保险费的关系分布
df["age"] = (df["age"] / 10).astype(int)
plt.figure(figsize=(10, 6))
sns.violinplot(x="age", y="charges", data=df)
plt.savefig('./Files/violin-5.png')
